/*
 *    Copyright 2021 Huawei Technologies Co., Ltd.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package org.edgegallery.developer.service;

import org.edgegallery.developer.domain.shared.Page;
import org.edgegallery.developer.model.workspace.OpenMepCapabilityGroup;
import org.edgegallery.developer.response.FormatRespDto;
import org.springframework.transaction.annotation.Transactional;
import com.spencerwi.either.Either;

public interface CapabilityService {

	/**
	 * createCapabilityGroup.
	 *
	 * @param capabilityGroup capabilityGroup
	 * @return
	 */
	@Transactional
	public Either<FormatRespDto, OpenMepCapabilityGroup> createCapabilityGroup(OpenMepCapabilityGroup capabilityGroup);

	/**
	 * modify OpenMepCapabilityGroup.
	 *
	 * @param groupId         groupId
	 * @param capabilityGroup input param
	 * @return
	 */
	@Transactional
	public Either<FormatRespDto, OpenMepCapabilityGroup> updateGroup(String groupId,
			OpenMepCapabilityGroup capabilityGroup);

	/**
	 * deleteCapabilityByUserIdAndGroupId.
	 */
	public Either<FormatRespDto, Boolean> deleteCapabilityByUserIdAndGroupId(String groupId);

	/**
	 * getAllCapabilityGroups.
	 */
	public Page<OpenMepCapabilityGroup> getAllCapabilityGroups(String userId, String twoLevelName,
			String twoLevelNameEn, int limit, int offset);

	/**
	 * getCapabilityByGroupId.
	 */
	public Either<FormatRespDto, OpenMepCapabilityGroup> getCapabilityByGroupId(String groupId);
}
